# 使用xpath需要进行安装 pip install lxml
from lxml import etree
xml="""
<book>
     <id>1</id>
     <name>野花遍地⾹</name>
     <price>1.23</price>
     <nick>臭⾖腐</nick>
     <author>
         <nick class="joy">周杰伦</nick>
         <nick class="jolin">蔡依林</nick>
         <nick id="xzq">薛之谦</nick>
         <nick id="syz">孙燕姿</nick>
         <div>
             <span>
                 <nick>刘亦菲</nick>
             </span>
         </div>                 
         <span>
             <nick>迪丽热巴</nick>
         </span>
         <div>
             <nick>杨幂</nick>
         </div>
     </author>
     <partner>
         <nick id="ppc">刘诗诗</nick>
         <nick id="ppbc">唐嫣</nick>
     </partner>
</book>
"""
# XML可以用来解析XML文本内容
tree=etree.XML(xml)
# 通过/标记名字，进行定位元素
result1=tree.xpath("/book/name")
# /book/author/nick表示获取book节点下author节点下的nick节点
result2=tree.xpath("/book/author/nick")
# text()表示获取节点下的文本
result3=tree.xpath("/book/author/nick/text()")
# //表示后代（直接过间接子节点的含义）
result4=tree.xpath("/book/author//nick/text()")
print(result4)
# *表示统配符，表示任意标签
result5=tree.xpath("/book/author/*/nick/text()")
print(result5)
# parse方法可以用来解析外部的HTML文件
tree2=etree.parse("首页.html")
result6=tree2.xpath("/html/body/ul/li/a/text()")
print(result6)
# 直接获取第一个li中的a标记中的文本，可以直接以下标的方式进行获取,注意下标从1开始
result7=tree2.xpath("/html/body/ul/li[1]/a/text()")
print(result7)
# 要获取节点的属性，需要再属性前面加上@ 指定属性的名字即可
result8=tree2.xpath("/html/body/ul/li/a/@href")
print(result8)
# 可以获取指定属性的标记
result9=tree2.xpath("/html/body/ol/li/a[@href='feiji']/text()")
print(result9)
# 若//前面没有指定父节点，则表示获取页面上的所有该标记
result10=tree2.xpath("//a/text()")
print(result10)
# 获取所有的ul下面的li标记中的内容
result11=tree2.xpath("/html/body/ul/li")
# 此时的item表示就是所有的li元素对象
for item in result11:
    # 可以在当前节点下继续向下查找，在内容前加上./后继续操作即可
    print(item.xpath("./a/text()"))



